2026-10-15T18:05:19.5627151Z ##[group]Run npm run test:deploy
2026-10-15T18:05:19.5627185Z [36;1mnpm run test:deploy[0m
2026-10-15T18:05:19.5627196Z shell: /usr/bin/bash -e {0}
2026-10-15T18:05:19.5627206Z env:
2026-10-15T18:05:19.5627213Z   CARGO_TERM_COLOR: never
2026-10-15T18:05:19.5627281Z   CLOUDFLARE_ACCOUNT_ID: 1e6f2cffa3f445920836e8ebe446bb58
2026-10-15T18:05:19.5627290Z   WRANGLER_SEND_METRICS: false
2026-10-15T18:05:19.5627296Z ##[endgroup]
2026-10-15T18:05:19.6878462Z 
2026-10-15T18:05:19.6878584Z > test:deploy
2026-10-15T18:05:19.6878618Z > node --test "scripts/deploy/*.test.mjs"
2026-10-15T18:05:19.6878632Z 
2026-10-15T18:05:19.8318889Z ✔ a release's version bump keeps the Rust caches' key, a new dependency changes it (2.136704ms)
2026-10-15T18:05:19.8350501Z ✔ the toolchain is read from rustc -V (0.26881ms)
2026-10-15T18:05:19.8351770Z ✔ the CLI's builder image is pinned, and keys its cache by its digest (0.207851ms)
2026-10-15T18:05:19.8353581Z ✔ a unit's hash is read from its files and folders (0.23137ms)
2026-10-15T18:05:19.8361720Z ✔ only the units the build did not use are pruned (2.788965ms)
2026-10-15T18:05:21.1818564Z error: no matching package named `base64` found
2026-10-15T18:05:21.1820285Z location searched: crates.io index
2026-10-15T18:05:21.1820411Z required by package `g1t-api v0.1.0 (/home/runner/work/repo/apps/api)`
2026-10-15T18:05:21.1820502Z note: offline mode (via `--offline`) can sometimes cause surprising resolution failures
2026-10-15T18:05:21.1823529Z help: if this error is too confusing you may wish to retry without `--offline`
2026-10-15T18:05:21.4606134Z ✔ the manifest matches every wrangler config in the repository (29.394188ms)
2026-10-15T18:05:21.4608635Z ✔ every wrangler.jsonc is found, and only checked-in ones (22.570646ms)
2026-10-15T18:05:21.4613454Z ✔ problems are found: an unlisted config, a later-stage binding, a wrong database, an unnamed KV (23.983369ms)
2026-10-15T18:05:21.4614642Z ✔ stages follow bindings: nothing binds to a unit that ships after it (0.523271ms)
2026-10-15T18:05:21.4618633Z ✔ inside a stage, a Worker that does not exist yet goes before those bound to it (0.746881ms)
2026-10-15T18:05:21.4662862Z ✔ Rust workers build with the shared script and the same wasm-opt level (0.669572ms)
2026-10-15T18:05:21.4662972Z ✔ shared crates and packages are read from workspace metadata (0.290621ms)
2026-10-15T18:05:21.4663076Z ✔ the runner's image is built from the runner crate and what it uses, on the base its lock names (0.392551ms)
2026-10-15T18:05:21.4663149Z ✔ services/runner/base.json records the base its folder builds (12.74073ms)
2026-10-15T18:05:21.4663222Z ✔ an image's hash ignores line endings, and its tags say what they are (124.619561ms)
2026-10-15T18:05:21.4663290Z ✔ only the lockfile entries the runner is built from name its image (0.470001ms)
2026-10-15T18:05:21.4663370Z ✔ the runner's deploy config names its image by reference, beside its wrangler.jsonc (21.330494ms)
2026-10-15T18:05:21.4663624Z ✔ the registry is asked for an image's manifest, without Docker (1.154791ms)
2026-10-15T18:05:21.4663696Z ✔ a push counts only when it ends with a digest, and is tried again (0.925342ms)
2026-10-15T18:05:21.4663760Z ✔ a static Linux binary is told from a dynamic one (1.056072ms)
2026-10-15T18:05:21.4663851Z ﹣ path dependencies agree with Cargo's own resolved graph (960.077738ms) # cargo metadata could not resolve offline
2026-10-15T18:05:21.4663930Z ✔ every import that leaves a unit's folder is covered by its dependencies or inputs (73.759489ms)
2026-10-15T18:05:21.4663999Z ✔ a shared crate's change reaches every unit built from it, and no other (0.892471ms)
2026-10-15T18:05:21.4664064Z ✔ a shared package's change reaches what imports it (0.24367ms)
2026-10-15T18:05:21.4667104Z ✔ a crate's tests, benches and examples deploy nothing (0.548321ms)
2026-10-15T18:05:21.4667985Z ✔ a Rust file compiled only for tests is found from what declares it (1.224582ms)
2026-10-15T18:05:21.4668723Z ✔ this repository's test-only sources are read from git (183.759396ms)
2026-10-15T18:05:21.4669370Z ✔ decide: a change only to tests deploys nothing (1.290572ms)
2026-10-15T18:05:21.4669980Z ✔ own folders, declared inputs and root files (0.510641ms)
2026-10-15T18:05:21.4670565Z ✔ a Cargo.lock change reaches only crates that use what changed (0.545541ms)
2026-10-15T18:05:21.4671401Z ✔ a package-lock change reaches through workspace links (0.564601ms)
2026-10-15T18:05:21.4673737Z ✔ decide: changed units deploy, others wait, unknown ones deploy (0.35383ms)
2026-10-15T18:05:21.4674512Z ✔ decide: --force deploys unchanged units; a commit missing from history deploys (0.199411ms)
2026-10-15T18:05:21.4675644Z ✔ decide: Cargo.lock counts only where it reaches (0.607121ms)
2026-10-15T18:05:21.4682399Z ✔ decide: the runner's image rebuilds only when what it is built from changed (0.25408ms)
2026-10-15T18:05:21.4685431Z ✔ the plan as data: migrations, and each stage's units in jobs that share a build (1.041272ms)
2026-10-15T18:05:21.4686248Z ✔ units are picked by short name, folder or Worker name (0.568081ms)
2026-10-15T18:05:21.4687004Z ✔ a CI job installs only what its units need (1.296842ms)
2026-10-15T18:05:21.4687774Z ✔ a deploy is annotated with its commit, and read back (0.24155ms)
2026-10-15T18:05:21.4689700Z ✔ the live commit: the live version's, looking through secret changes (0.45435ms)
2026-10-15T18:05:21.4691593Z ✔ Wrangler's output: pending migrations and the version a deploy made (0.49208ms)
2026-10-15T18:05:21.4692581Z ✔ the API's answers: the live commit as Wrangler's would give it (1.270942ms)
2026-10-15T18:05:21.9599062Z ✔ the API's answers: a Worker never deployed, and a refusal, never throw (502.840731ms)
2026-10-15T18:05:21.9605522Z ✔ the API is used only with the token Wrangler would be given (0.42687ms)
2026-10-15T18:05:21.9607244Z ✔ pending migrations: the folder's files less the names in d1_migrations (2.031754ms)
2026-10-15T18:05:22.0188542Z ✔ the pool runs everything, no more than its limit at once (16.045236ms)
2026-10-15T18:05:22.0188685Z ✔ self-hosting builds every Rust service the manifest says it runs (0.645291ms)
2026-10-15T18:05:22.0188765Z ✔ the self-hosting architecture page names every unit (0.22223ms)
2026-10-15T18:05:22.0188822Z ✔ the architecture's services page names every unit, with the services it binds to (3.707066ms)
2026-10-15T18:05:22.0188873Z ✔ resolveStack works on a manifest with no workspace crates or packages (3.267756ms)
2026-10-15T18:05:22.0188938Z ✔ decide: a commit older than what runs is never deployed by accident, even forced; --rollback means it (0.28832ms)
2026-10-15T18:05:22.0188993Z ✔ a deploy by hand reports to the repository on g1t, and a workflow's does not (1.462072ms)
2026-10-15T18:05:22.0189053Z ✔ a failed wrangler command is reported by its error, not its trace (0.204201ms)
2026-10-15T18:05:22.0189101Z ✔ Cloudflare failing is tried again; a mistake in what is deployed is not (0.31521ms)
2026-10-15T18:05:22.0189162Z ✔ sandboxes roll over at once when their image or container settings changed, and not otherwise (0.192141ms)
2026-10-15T18:05:22.0199712Z ✔ the deploy tool itself parses: a test that never imports it would not notice (28.218795ms)
2026-10-15T18:05:22.3679630Z ✔ the statements are all there (0.975462ms)
2026-10-15T18:05:22.3691481Z ✔ twenty invites each: the twenty-first is refused in the statement that writes (44.196651ms)
2026-10-15T18:05:22.3691602Z ✔ revoking an unused invite gives it back; an expired one never counted (83.577045ms)
2026-10-15T18:05:22.3699837Z ✔ a used invite is spent: revoking it does nothing and it still counts (37.27824ms)
2026-10-15T18:05:22.3700090Z ✔ a pending invite for the same address is found; a revoked one is not (39.275114ms)
2026-10-15T18:05:22.3743431Z ✔ staff grants add to the twenty and can take some back (36.824439ms)
2026-10-15T18:05:22.3743555Z ✔ signing up from the link spends the invite once and records who invited whom (40.630596ms)
2026-10-15T18:05:22.4375028Z ✔ a body that broke off is worth another try, a lockfile out of step is not (1.353312ms)
2026-10-15T18:05:22.4375168Z ✔ an install that ends without saying why, or stalls, is tried again (0.20948ms)
2026-10-15T18:05:22.4375244Z ✔ a dropped connection is tried again until the install passes (2.300034ms)
2026-10-15T18:05:22.4375267Z ✔ a real error fails at once (0.19738ms)
2026-10-15T18:05:22.4375331Z ✔ it gives up after its tries, with npm's exit code (0.188751ms)
2026-10-15T18:05:22.4375355Z ✔ a stalled install is run again (0.17483ms)
2026-10-15T18:05:22.5948146Z ✔ webhooks: the hourly purge deletes old deliveries by time (2.426634ms)
2026-10-15T18:05:22.5950305Z ✔ billing: this month's users are read from an index, not the ledger (60.028687ms)
2026-10-15T18:05:22.5960236Z ✔ events: a repository's events of one type, newest first, page by page (4.182387ms)
2026-10-15T18:05:22.5971305Z ✔ actions: a self-hosted runner's poll finds queued jobs by namespace, whatever its case (18.331999ms)
2026-10-15T18:05:22.5982297Z ✔ chat: a channel's messages and a thread's replies, newest first, page by page (2.943204ms)
2026-10-15T18:05:22.5982620Z ✔ chat: the sidebar's unread messages are read from each channel's index, after the last read (2.983165ms)
2026-10-15T18:05:22.6021111Z ✔ chat: a page's reactions are read by message, and a workspace's emoji by name (2.821665ms)
2026-10-15T18:05:22.7166076Z ✔ the runner's layer is the binary alone, at its path and mode, owned by root (4.362597ms)
2026-10-15T18:05:22.7176715Z ✔ the layer and entrypoint are what services/runner/Dockerfile builds (0.597991ms)
2026-10-15T18:05:22.7177029Z ✔ the config is the base's, with the layer, the entrypoint and no inherited command (0.971811ms)
2026-10-15T18:05:22.7177259Z ✔ the manifest names the base's layers, then the binary's, in the base's format (0.374301ms)
2026-10-15T18:05:22.7187955Z ✔ image references and bearer challenges are read (0.673001ms)
2026-10-15T18:05:22.7194428Z ✔ the runner's image is made in the registry from the base's manifest and one new layer, pulling none of the base (28.522416ms)
2026-10-15T18:05:22.9551057Z ✔ a base that is not where it should be, or not what base.json says, stops it (1.219682ms)
2026-10-15T18:05:22.9551228Z ✔ a registry that asks for a bearer token is given the one its realm trades the credentials for (2.162104ms)
2026-10-15T18:05:22.9551299Z scheduler: g1t-webhooks (* * * * *) is still running from the last time; skipped
2026-10-15T18:05:22.9551367Z scheduler: g1t-webhooks (* * * * *): 200 {"outcome":"exception"}
2026-10-15T18:05:22.9551432Z ✔ fields read numbers, ranges, lists and steps (2.252273ms)
2026-10-15T18:05:22.9551497Z ✔ the services' crons match when hosted g1t's would fire (1.767053ms)
2026-10-15T18:05:22.9551554Z ✔ what is due is each matching cron of each service (0.661931ms)
2026-10-15T18:05:22.9551611Z ✔ a run asks Wrangler for the handler, and a slow one is not doubled (32.214152ms)
2026-10-15T18:05:22.9551679Z ✔ a deploy is announced to status.g1t.sh with the token, and without one nothing is sent (32.036122ms)
2026-10-15T18:05:22.9551750Z ✔ an announcement that fails is a warning, never a failed deploy (1.021791ms)
2026-10-15T18:05:22.9551847Z ✔ the stages run inside the window: started before, finished after, even when they throw; a dry run says nothing (0.703051ms)
2026-10-15T18:05:22.9551924Z ✔ deploy.mjs announces every deploy, and the workflow passes it the token (0.613821ms)
2026-10-15T18:05:22.9551939Z ℹ tests 92
2026-10-15T18:05:22.9551954Z ℹ suites 0
2026-10-15T18:05:22.9551970Z ℹ pass 91
2026-10-15T18:05:22.9551983Z ℹ fail 0
2026-10-15T18:05:22.9551995Z ℹ cancelled 0
2026-10-15T18:05:22.9552007Z ℹ skipped 1
2026-10-15T18:05:22.9552021Z ℹ todo 0
2026-10-15T18:05:22.9552035Z ℹ duration_ms 3212.97293
